package acciones;


import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Vector;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

import persistencia.ArticuloDAO;
import persistencia.AutorDAO;
import persistencia.EstadoDAO;

import dominio.Articulo;
import dominio.Autor;
import dominio.Estado;
import dominio.Persona;

public class SubirArticulo extends ComprobarSesion {
	private static final long serialVersionUID = 1L;
	private Articulo articulo;
	private Vector<Autor> autoresConPosicion = new Vector<Autor>();
	private Persona persona;
	private String titulo;
	private String fechaPublicacion;
	private String estadoUltimo;
	private String ruta;
	private int numeroAutores;
	private String autoresOrdenados="";
	private File archivo;
	private Exception excepcion;
	private File upload;
	private String uploadFileName;

	

	public String execute() {
		try {
			persona = checkSesion("persona");
			
			String path = ServletActionContext.getServletContext().getRealPath("/docs")+"/";
			ruta = path + uploadFileName;
			File theFile = new File(ruta);
			FileUtils.copyFile(upload, theFile);
			
			ruta = "./docs/" + uploadFileName;
			theFile = new File(ruta);

			
			autoresConPosicion = new Vector<Autor>();
			int i = 0;
			String[] tokens = autoresOrdenados.split(",( )*");
			for (String t : tokens) {
				autoresConPosicion.add(i, AutorDAO.newAutor(t));
				i++;
			}
			estadoUltimo ="NUEVO";
			numeroAutores = i;
			Calendar today = new GregorianCalendar(); 
			SimpleDateFormat df = new SimpleDateFormat();
	        df.applyPattern("dd/MM/yyyy");
	        fechaPublicacion = df.format(today.getTime());
	        
	        //Se crea y se inserta el articulo y sus autores
			articulo = new Articulo(titulo, fechaPublicacion, autoresConPosicion, ruta, (Autor)persona, estadoUltimo);
			ArticuloDAO.insert(articulo);
			
			//Se crea e inserta el estado
			Estado nuevoEstado = new Estado(articulo.getIdArticulo(), estadoUltimo, fechaPublicacion);
			EstadoDAO.insertEstadoArticulo(nuevoEstado);			
			return SUCCESS;
		} catch (Exception e) {
			excepcion = e;
			return ERROR;
		}
	}


	public Articulo getArticulo() {
		return articulo;
	}


	public void setArticulo(Articulo articulo) {
		this.articulo = articulo;
	}


	public Vector<Autor> getAutoresConPosicion() {
		return autoresConPosicion;
	}


	public void setAutoresConPosicion(Vector<Autor> autoresConPosicion) {
		this.autoresConPosicion = autoresConPosicion;
	}


	public Persona getPersona() {
		return persona;
	}


	public void setPersona(Persona persona) {
		this.persona = persona;
	}


	public String getTitulo() {
		return titulo;
	}


	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}


	public String getFechaPublicacion() {
		return fechaPublicacion;
	}


	public void setFechaPublicacion(String fechaPublicacion) {
		this.fechaPublicacion = fechaPublicacion;
	}


	public String getEstadoUltimo() {
		return estadoUltimo;
	}


	public void setEstadoUltimo(String estadoUltimo) {
		this.estadoUltimo = estadoUltimo;
	}


	public String getRuta() {
		return ruta;
	}


	public void setRuta(String ruta) {
		this.ruta = ruta;
	}


	public int getNumeroAutores() {
		return numeroAutores;
	}


	public void setNumeroAutores(int numeroAutores) {
		this.numeroAutores = numeroAutores;
	}


	public String getAutoresOrdenados() {
		return autoresOrdenados;
	}


	public void setAutoresOrdenados(String autoresOrdenados) {
		this.autoresOrdenados = autoresOrdenados;
	}


	public File getArchivo() {
		return archivo;
	}


	public void setArchivo(File archivo) {
		this.archivo = archivo;
	}


	public Exception getExcepcion() {
		return excepcion;
	}


	public void setExcepcion(Exception excepcion) {
		this.excepcion = excepcion;
	}


	public File getUpload() {
		return upload;
	}


	public void setUpload(File upload) {
		this.upload = upload;
	}


	public String getUploadFileName() {
		return uploadFileName;
	}


	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

}
